1_1 散布図と相関およびグラフ設定の基本
このページでは相関を見る時の散布図を、データの属性ごとに色を変えてプロットしてみます。
https://scrapbox.io/files/6387830b1b7634001d5cdb2a.png
めちゃ当たり前で解析としては意味を感じない図ですが、年間平均気温が高い地域は夏の平均気温も高いという架空のデータです。相関の検定まで行っているscript全体は以下です。
このスクリプトのポイントとしては、色を自分好みに個別にしてして、dotのサイズや透明度も指定しているというところでしょうか。色を自分で決めるのはめんどくさいから自動で指定するモードの方が良いという人もいるかもしれませんが、僕は自分で決めたいのです。。。
code:r
# ---------- preparation in advanca 事前準備--------------------------------------------------
# Install packages if not installed 必要なパッケージが無けれな自動でインストール-----
if(!require("ggplot2")) install.packages("ggplot2")
# clear R's brain 一度参照したリストもしくは変数を次の作業で消す-----
rm(list = ls())
# Load libraries 必要なパッケージの読み込み-----
library(ggplot2)
# Data input 今後以下のパスからデータを自動で読み込みする場合-----
library(readr)
CanRsample <- read.csv(file.choose()) #Run and choose CanRsample2021.csv # # ----------prep done 準備だん------------------------------------------------------------
# 【1_1】scatter plots 散布図(相関など)----------------------------
cor.test(x = CanRsample$aveTemp_year, y = CanRsample$aveTemp_summer, method="pearson") #ピアソン(パラメトリック) ggplot(CanRsample, aes(x = aveTemp_year, y = aveTemp_summer, color = place)) +
scale_color_manual(values = c (Sendai = "deepskyblue3", Tokyo = "gray1", Kagoshima = "orange" )) +
ggtitle("【1_1】scatter plots 散布図(相関など)") +
theme_classic(base_size = 22, base_family = "HiraKakuProN-W3") # white backgrond グラフの背景を白に、フォントはMacとWindowsどちらでも使えるMeiryoが無難?
【パッケージ】
使用するパッケージは ggplot2 です!このサイトでのグラフ描画は、基本的にこのパッケージでやります。このパッケージのおかげで色んなグラフの描画が楽になったと言われていますね。
tidyverse や ggpubr などのパッケージも一緒に使うことが多いのですが、今回は ggplot2 だけで大丈夫です。いろいろなscriptを書くことが分かっているときは、(実際に使うかどうかはともかく僕は)一緒に入れてしまうことが多いですが。
【相関の統計】
ピアソンの積率相関(パラメトリック)とスピアマンの順位相関(ノンパラ)と、両方のやり方を載せています。
どちらも cor.test() 関数で用いることができ、method="" の "" の中に使いたい手法名を書けばOKです。
x = もしくは y = でどちらの軸にどのデータを表したいかを決めます。
例えば、
x = 使用データのオブジェクト名$変数となる列名
です。簡単ですね。
【グラフ描画】
script内のコメントに結構説明が書いてあるので、そちらだけで分かりそうなものは説明を省きますが、このページは描画の最初の回なので、多少詳しく書いていきます。
最初にある ggplot() で、
使用するデータのオブジェクトを指定し、さらに入れ子で使っている aes() でx軸やy軸、色をどの変数に基づいて決めるかなどを指定しています。今回の色しては place にしているので、Sendai、Tokyo、Kagoshimaが色分けされています。
以降、ggplot2の設定方法として、 + で色んなオプションを追加して書いています。+を付けなければ、そこでグラフ描画の指定は終了です。
scale_color_manual() で、色を指定しています。
"水準名 = 色名" で指定しています。
※ scale_fill_manual() という関数もあり、グラフの種類によってはこちらで色指定をすることもあります。使い分けの基準は、僕は理解できてませんが、経験的にちゃんと描けるものを使っていればOKというスタンスで書いています。
ちなみに、この scale_color_manual()+ の部分を消したり、シャープを付けてコメント化してみると色はRによって自動で割り当てられます。
geom_point() で、dotの大きさと透明度を指定しています。
size:実験室レベルの動物実験の n数だとサイズ4くらいがちょうど良いと思っています。数百以上のデータがある場合はもっと小さくした方が密度高く分布している空間などが分かりやすくて良いと思います。
alpha:透明度です。値を小さくするとが薄くなっていきます。0.7くらいの透明度を持たせていると、dotsが重なったときに見やすいと思っています。
geom_smooth(method = 'lm', colour = 'darkgrey') で回帰直線の当てはめをしています。
デフォルトで薄い色のゾーンが描かれますが、これはSEMだそうです。コメントにある通り、消すこともできます。僕はダークグレーで線を引くのが好きです。
回帰直線を引くというのは、パラメトリック検定をすることを前提にしていると思うので、ノンパラの検定をする場合は、線は書かない方が良いのかなと思ってるんですが、まぁ、そのへんは。
グラフタイトルや軸のラベルも、僕は個別で指定しています。
xlab("年間平均気温") :X軸のラベル
ylab("夏の平均気温") :Y軸のラベル
ggtitle("【1_1】scatter plots 散布図(相関など)") :グラフ全体のタイトル
という感じです。" " の中を自分の用途に応じて都度書き換えるだけです。
オブジェクト化したグラフを並べて表示させるパッケージがいつくかあります。
オブジェクト1 + オブジェクト2 みたいに書いて実行すると、1を左、2を右に表示させた1枚のFigを作ってくれます。
これを見越して、ggtitleでつけるタイトル名に "A. アレコレの解析"、"B. どこそこの探索" みたいに、頭にアルファベットを付けておけば、Fig. 1AとFig. 1Bが合わさったFig. 1が簡単に再現性よく作成できますね。
グラフの値の範囲について、
冒頭でお示ししているグラフの値が0から始まっていないのが気になっている方もいるかもしれません。
一括DL用のscriptには入れてなかったのですが、このページのscriptには
ylim(0, 45) + xlim(0, 40) +
という一文を足しておきました。(最小値, 最大値) を記入してください。
シャープを外して描画を実行すると以下のようになります。
https://scrapbox.io/files/65deb601771ff50024ad7901.png
軸の入れ替えも簡単にできます。
coord_flip() は、現状コメント化して無効化していますが、これを有効にすると、xとy軸が入れ替わります。棒グラフの時の方が便利さを感じます。
グラフテーマとフォントについてですが、
僕は、R特有の薄いグレーのグリッドが無い方が良いなぁと思っているので、
theme_classic() を使って背景を白にしています。この関数に、フォントのサイズと種類をしていします。
base_size:フォントサイズです。どんな図を作るか次第ですが、僕は22ptから始めています。
base_family:フォントの種類を指定するところです。" " の中にフォントの名前を書きます。
Rの日本語フォントは、たいへん難しい問題です。Rで書いたグラフを写真とともにFigにするためにPDFなどへエクスポート(してからイラレで作図)するときは、結構めんどうで、僕は諦めました。原著論文は英語で書くので問題ないのですが。
ただ、Rstudioで表示させたりそれを png に出力するだけなら、PCにインストールされているフォントを使えます。僕は、日本語表示で図を作りたいときは、Rstudioに表示されたグラフをスクショすることにしています。
フォントはMacなので、HiraKakuProN-W3 を使っていますが、MacとWin問わず使える Meiryo あたりを指定しておくのが無難なのかもしれません。
PDFへの出力をするとき(英語で論文用の Fig を作るとき)は、Helvetica を使っています。
Rに表示させるだけなら、使っている端末のシステムフォントで大丈夫らしいのですが、PDFにエクスポートする際はRにインストールされているフォントを指定しないと文字化けするそうです。
※ あと、Rstudioをアップデートしたりすると、問答無用で日本語フォントが⬜︎⬜⬜みたいになります。いわゆる、餅になるというやつ。この場合、適当なフォントを指定して実行する→使いたいフォントに戻す、みたいな作業を何度かやると、ちゃんと動くようになりました。
最後に、凡例についてですが、
消したいときがありますよね。その場合、
theme(legend.position = "none")
という一文を加えると、凡例が消えることになっているのですが、僕は、うまく機能しないことが多いです。とりあえず、ggplotの最後に書かないと動かず、途中に入れてると反応しません。なので、上記のscriptでは変な位置に+が書いてあると思った方もいらっしゃると思います。
凡例がうまく消えない場合、色を変えるなど適当な更新事項を入れた上で凡例を消す一文も加える→うまく凡例が消えたら色も戻す、みたいな作業をすると、ちゃんと動くこともあります。
凡例は、グラフ1つならあった方が良いのですが、似たようなグラフが何個も続く時は、どこか1つにあれば十分ですので、patchworkでグラフのオブジェクトをタイリングして表示する際に必要になってきます。
-------------------------------------
うまく描画ができそうな気がしてきましたでしょうか。
このサイトのポイントは、「必要な統計検定とブラフ描画一気に行うscriptのセットを得る」ということです。今回は、データシートの構造の組み替えをしなくてすむ検定と描画だったので簡単でしたが、場合によっては、
データを読み込む→統計をする→描画のためにデータの積み上げをしたオブジェクトを作る→描画
という作業が必要になることもあります。